package com.novel.service;

import com.novel.core.common.req.AdminPageReqDto;
import com.novel.core.common.resp.PageRespDto;
import com.novel.core.common.resp.RestResp;
import com.novel.dto.req.AdminLoginReqDto;
import com.novel.dto.req.AuthorInfoReqDto;
import com.novel.dto.req.BookListRepDto;
import com.novel.dto.req.UserInfoReqDto;
import com.novel.dto.resp.*;
import com.novel.entity.Admin;
import org.springframework.web.bind.annotation.PathVariable;

import java.util.List;

/**
 * @author wang
 */
public interface AdminService {

    /**
     * 管理员登录
     * @param loginReqDto 登录参数：username：用户名 password：密码
     * @return JWT + 管理员名称 + 管理员类型
     */
    RestResp<AdminLoginRespDto> login(AdminLoginReqDto loginReqDto);

    /**
     * 获取小说类别
     * @return 小说类别 + id
     */
    RestResp<List<BookCategoryRespDto>> getBookCategory();

    /**
     * 查询管理员信息
     * @param adminPageReqDto 查询参数
     * @return 管理员信息：list集合
     */
    RestResp<PageRespDto<AdminInfoRespDto>> getAdminInfo(AdminPageReqDto adminPageReqDto);

    /**
     * 添加管理员
     * @param admin 管理员信息参数
     * @return 无结果返回
     */
    RestResp<Void> addAdmin(Admin admin);

    /**
     * 根据ID查询管理员信息
     * @param id 管理员ID
     * @return 管理员信息
     */
    RestResp<Admin> showAdminById(Long id);

    /**
     * 修改管理员
     * @param admin 管理员信息参数
     * @return 无结果返回
     */
    RestResp<Void> updateAdmin(Admin admin);

    /**
     * 根据id删除管理员
     * @param id 管理员id
     * @return 无
     */
    RestResp<Void> deleteAdminById(Long id);

    /**
     * 查询作者信息
     * @param authorInfoReqDto 查询参数
     * @return 作者信息List
     */
    RestResp<PageRespDto<AuthorInfoRespDto>> getAuthorList(AuthorInfoReqDto authorInfoReqDto);

    /**
     * 根据id删除作者
     * @param id 作者id
     * @return 无
     */
    RestResp<Void> deleteAuthorById(Long id);

    /**
     * 查询用户信息
     * @param userInfoReqDto 查询参数
     * @return 用户信息List
     */
    RestResp<PageRespDto<UserInfoListRespDto>> getUserList(UserInfoReqDto userInfoReqDto);

    /**
     * 根据id删除作者
     * @param id 用户id
     * @return 无
     */
    RestResp<Void> deleteUserById(Long id);

    /**
     * 查询小说信息
     * @param bookListReqDto 查询参数
     * @return 小说信息List
     */
    RestResp<PageRespDto<BookListRespDto>> getBookList(BookListRepDto bookListReqDto);

    /**
     * 根据ID删除小说
     * @param id 小说ID
     * @return 无
     */
    RestResp<Void> deleteBookById(@PathVariable("id") Long id);
}
